package com.example.studyktdemo.uitls;

import com.google.gson.internal.$Gson$Types;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;

import okhttp3.Request;

public abstract class ResultCallBack<T> {

    //请求成功的数据返回类型
    Type mType;

    public ResultCallBack(){
        mType = getSuperclassTypeParameter(getClass());
    }

    @org.jetbrains.annotations.NotNull
    static Type getSuperclassTypeParameter(Class<?> subClass){
        Type superClass = subClass.getGenericSuperclass();
        if(superClass instanceof Class){
            throw new RuntimeException("Missing type parameter.");
        }

        ParameterizedType parameterized =(ParameterizedType) superClass;
        return $Gson$Types.canonicalize(parameterized.getActualTypeArguments()[0]);
    }


    /**
     * 请求之前的方法
     * @param request
     */
    public void onBefore(Request request){

    }

    /**
     * 请求之后的方法
     */
    public void onAfter(){

    }

    /**
     * 错误时的方法
     * @param request
     * @param e
     */
    public abstract void onError(Request request,Exception e);

    /**
     * 请求成功
     * @param response
     */
    public abstract void onResponse(T response);
}
